home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xalan.jar / org / apache / xalan / xslt / KeyTable.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-04-12  |  4.3 KB  |  289 lines

  1. package org.apache.xalan.xslt;
  2.  
  3. import java.util.Hashtable;
  4. import java.util.Vector;
  5. import org.apache.xalan.xpath.KeyDeclaration;
  6. import org.apache.xalan.xpath.NodeListImpl;
  7. import org.apache.xalan.xpath.XObject;
  8. import org.apache.xalan.xpath.dtm.DTM;
  9. import org.apache.xalan.xpath.dtm.DTMProxy;
  10. import org.apache.xalan.xpath.xml.PrefixResolver;
  11. import org.apache.xalan.xpath.xml.XMLParserLiaison;
  12. import org.apache.xalan.xpath.xml.XMLParserLiaisonDefault;
  13. import org.w3c.dom.Element;
  14. import org.w3c.dom.NamedNodeMap;
  15. import org.w3c.dom.Node;
  16. import org.w3c.dom.NodeList;
  17. import org.xml.sax.SAXException;
  18.  
  19. public class KeyTable {
  20.    Node m_docKey;
  21.    Hashtable m_keys = new Hashtable();
  22.  
  23.    KeyTable(Node var1, Node var2, PrefixResolver var3, String var4, Vector var5, XMLParserLiaison var6) throws SAXException {
  24.       this.m_docKey = var1;
  25.       XMLParserLiaison var7 = var6;
  26.  
  27.       Node var43;
  28.       try {
  29.          DTMProxy var10000 = (DTMProxy)var1;
  30.          DTMProxy var32 = (DTMProxy)var2;
  31.          int var34 = var32.getDTMNodeNumber();
  32.          DTM var36 = var32.getDTM();
  33.          boolean var38 = false;
  34.  
  35.          for(int var40 = var34; var40 != -1; var40 = var36.getNextNode(var34, var40)) {
  36.             DTMProxy var42 = var36.getNode(var40);
  37.             int var44 = var5.size();
  38.             int var45 = 0;
  39.  
  40.             label242: {
  41.                KeyDeclaration var46;
  42.                NodeList var48;
  43.                int var49;
  44.                String var50;
  45.                while(true) {
  46.                   if (var45 >= var44) {
  47.                      break label242;
  48.                   }
  49.  
  50.                   var46 = (KeyDeclaration)var5.elementAt(var45);
  51.                   if (var46.m_name.equals(var4)) {
  52.                      if (var46.m_buildState == KeyDeclaration.BUILDING) {
  53.                         var38 = true;
  54.                         break label242;
  55.                      }
  56.  
  57.                      var46.m_buildState = KeyDeclaration.BUILDING;
  58.                      double var17 = var46.m_match.getMatchScore(var7, var42);
  59.                      if (var17 == Double.NEGATIVE_INFINITY) {
  60.                         var46.m_buildState = KeyDeclaration.BUILT;
  61.                      } else {
  62.                         XObject var47 = var46.m_use.execute(var6, var42, var3);
  63.                         var48 = null;
  64.                         var50 = null;
  65.                         if (var47.getType() != 4) {
  66.                            var49 = 1;
  67.                            var50 = var47.str();
  68.                            break;
  69.                         }
  70.  
  71.                         var48 = var47.nodeset();
  72.                         if (var48.getLength() != 0) {
  73.                            var49 = var48.getLength();
  74.                            break;
  75.                         }
  76.  
  77.                         var46.m_buildState = KeyDeclaration.BUILT;
  78.                      }
  79.                   }
  80.  
  81.                   ++var45;
  82.                }
  83.  
  84.                for(int var52 = 0; var52 < var49; ++var52) {
  85.                   if (var48 != null) {
  86.                      Node var53 = var48.item(var52);
  87.                      var50 = XMLParserLiaisonDefault.getNodeData(var53);
  88.                   }
  89.  
  90.                   if (var50 != null) {
  91.                      Object var55 = this.m_keys.get(var46.m_name);
  92.                      Hashtable var54;
  93.                      if (var55 == null) {
  94.                         var54 = new Hashtable();
  95.                         this.m_keys.put(var46.m_name, var54);
  96.                      } else {
  97.                         var54 = (Hashtable)var55;
  98.                      }
  99.  
  100.                      Object var57 = var54.get(var50);
  101.                      NodeListImpl var56;
  102.                      if (var57 == null) {
  103.                         var56 = new NodeListImpl();
  104.                         var54.put(var50, var56);
  105.                      } else {
  106.                         var56 = (NodeListImpl)var57;
  107.                      }
  108.  
  109.                      boolean var58 = false;
  110.                      int var59 = ((Vector)var56).size();
  111.  
  112.                      for(int var30 = 0; var30 < var59; ++var30) {
  113.                         if (var42 == var56.item(var30)) {
  114.                            var58 = true;
  115.                            break;
  116.                         }
  117.                      }
  118.  
  119.                      if (!var58) {
  120.                         ((Vector)var56).addElement(var42);
  121.                      }
  122.                   }
  123.                }
  124.  
  125.                var46.m_buildState = KeyDeclaration.BUILT;
  126.             }
  127.  
  128.             if (var38) {
  129.                break;
  130.             }
  131.          }
  132.       } catch (ClassCastException var31) {
  133.          for(Node var8 = var2; var8 != null; var8 = var43) {
  134.             int var9 = var5.size();
  135.             NamedNodeMap var10 = null;
  136.             int var11;
  137.             if (var8.getNodeType() == 1) {
  138.                var10 = ((Element)var8).getAttributes();
  139.                var11 = var10.getLength();
  140.                if (var11 == 0) {
  141.                   var10 = null;
  142.                }
  143.             } else {
  144.                var11 = 0;
  145.             }
  146.  
  147.             Node var12 = var8;
  148.             int var13 = -1;
  149.  
  150.             while(var13 < var11) {
  151.                int var14 = 0;
  152.  
  153.                label250: {
  154.                   KeyDeclaration var15;
  155.                   NodeList var19;
  156.                   int var20;
  157.                   String var21;
  158.                   while(true) {
  159.                      if (var14 >= var9) {
  160.                         break label250;
  161.                      }
  162.  
  163.                      var15 = (KeyDeclaration)var5.elementAt(var14);
  164.                      if (var15.m_name.equals(var4)) {
  165.                         if (var15.m_buildState == KeyDeclaration.BUILDING) {
  166.                            return;
  167.                         }
  168.  
  169.                         var15.m_buildState = KeyDeclaration.BUILDING;
  170.                         double var16 = var15.m_match.getMatchScore(var7, var12);
  171.                         if (var16 == Double.NEGATIVE_INFINITY) {
  172.                            var15.m_buildState = KeyDeclaration.BUILT;
  173.                         } else {
  174.                            XObject var18 = var15.m_use.execute(var7, var12, var3);
  175.                            var19 = null;
  176.                            var21 = null;
  177.                            if (var18.getType() != 4) {
  178.                               var20 = 1;
  179.                               var21 = var18.str();
  180.                               break;
  181.                            }
  182.  
  183.                            var19 = var18.nodeset();
  184.                            if (var19.getLength() != 0) {
  185.                               var20 = var19.getLength();
  186.                               break;
  187.                            }
  188.  
  189.                            var15.m_buildState = KeyDeclaration.BUILT;
  190.                         }
  191.                      }
  192.  
  193.                      ++var14;
  194.                   }
  195.  
  196.                   for(int var22 = 0; var22 < var20; ++var22) {
  197.                      if (var19 != null) {
  198.                         Node var23 = var19.item(var22);
  199.                         var21 = XMLParserLiaisonDefault.getNodeData(var23);
  200.                      }
  201.  
  202.                      if (var21 != null) {
  203.                         Object var24 = this.m_keys.get(var15.m_name);
  204.                         Hashtable var51;
  205.                         if (var24 == null) {
  206.                            var51 = new Hashtable();
  207.                            this.m_keys.put(var15.m_name, var51);
  208.                         } else {
  209.                            var51 = (Hashtable)var24;
  210.                         }
  211.  
  212.                         Object var26 = var51.get(var21);
  213.                         NodeListImpl var25;
  214.                         if (var26 == null) {
  215.                            var25 = new NodeListImpl();
  216.                            var51.put(var21, var25);
  217.                         } else {
  218.                            var25 = (NodeListImpl)var26;
  219.                         }
  220.  
  221.                         boolean var27 = false;
  222.                         int var28 = ((Vector)var25).size();
  223.  
  224.                         for(int var29 = 0; var29 < var28; ++var29) {
  225.                            if (var12 == var25.item(var29)) {
  226.                               var27 = true;
  227.                               break;
  228.                            }
  229.                         }
  230.  
  231.                         if (!var27) {
  232.                            ((Vector)var25).addElement(var12);
  233.                         }
  234.                      }
  235.                   }
  236.  
  237.                   var15.m_buildState = KeyDeclaration.BUILT;
  238.                }
  239.  
  240.                ++var13;
  241.                if (var10 != null) {
  242.                   var12 = var10.item(var13);
  243.                }
  244.             }
  245.  
  246.             var43 = var8.getNodeType() != 1 && var8.getNodeType() != 9 ? null : var8.getFirstChild();
  247.  
  248.             while(var43 == null && var2 != var8) {
  249.                var43 = var8.getNextSibling();
  250.                if (var43 == null) {
  251.                   var8 = var8.getParentNode();
  252.                   if (var2 == var8 || var8 == null) {
  253.                      var43 = null;
  254.                      break;
  255.                   }
  256.                }
  257.             }
  258.          }
  259.       }
  260.  
  261.       int var33 = var5.size();
  262.  
  263.       for(int var35 = 0; var35 < var33; ++var35) {
  264.          KeyDeclaration var37 = (KeyDeclaration)var5.elementAt(var35);
  265.          Object var39 = this.m_keys.get(var37.m_name);
  266.          if (var39 == null) {
  267.             Hashtable var41 = new Hashtable();
  268.             this.m_keys.put(var37.m_name, var41);
  269.          }
  270.       }
  271.  
  272.    }
  273.  
  274.    public NodeList getNodeSetByKey(String var1, String var2) {
  275.       Object var3 = null;
  276.       Object var4 = this.m_keys.get(var1);
  277.       if (var4 != null) {
  278.          Object var5 = ((Hashtable)var4).get(var2);
  279.          if (var5 != null) {
  280.             var3 = (NodeList)var5;
  281.          } else {
  282.             var3 = new NodeListImpl();
  283.          }
  284.       }
  285.  
  286.       return (NodeList)var3;
  287.    }
  288. }
  289.